# 数据探索

# 导入工具包
import pandas as pd
import numpy as np

# 绘图工具
import matplotlib.pyplot as plt
import seaborn as sns

# 1、导入数据
dpath = "E:/VC_project/data/diabetes/"
train = pd.read_csv(dpath+"pima-indians-diabetes.csv")

print(train.head())
print(train.info())

# 2、数据的统计量
print(train.describe())
# 从结果中我们可以看到很多列的最小值为0。而在一些特定列代表的变量中，0值并没有意义，这就表名该值无效或为缺失值。
# 具体来说，下列变量的最小值为0时数据无意义：
# 血浆葡萄糖浓度、舒张压 、肱三头肌皮褶厚度 、餐后血清胰岛素 、体重指数

NaN_col_names = ["Plasma_glucose_concentration","blood_pressure",
                 "Triceps_skin_fold_thickness","serum_insulin","BMI"]
print((train[NaN_col_names]==0).sum())
# 结果显示：肱三头肌皮褶厚度 、餐后血清胰岛素中0值较多，几乎为数据的一般，其余较少

# 3、查看每个变量的分布及与标签之间的关系

# 3.1 Target
# 直方图查看分布情况
sns.countplot(train["Target"])
plt.xlabel("diabetes")
plt.ylabel("Number of occurrences")
plt.show()

# 3.2 int64 类型变量的分布与标签之间的关系

int_col_names=["pregnants","Plasma_glucose_concentration",
               "blood_pressure","Triceps_skin_fold_thickness",
               "serum_insulin","Age"]

for i in int_col_names:
    # 分布直方图
    fig1 = plt.figure()
    sns.distplot(train[i],kde=False)
    plt.xlabel(i)
    plt.ylabel("Number of occurrences")
    plt.show()

    # 小提琴图
    fig2 = plt.figure()
    sns.violinplot(x="Target",y=i,data=train,hue="Target")
    plt.xlabel("diabetes")
    plt.ylabel(i)
    plt.show()

# 3.3 float64 类型变量的分布与标签之间的关系

float_col_names = ["BMI","Diabetes_pedigree_function"]

for i in float_col_names:
    # 分布直方图
    fig3 = plt.figure()
    sns.distplot(train[i],kde=False)
    plt.xlabel(i)
    plt.ylabel("Number of occurrences")
    plt.show()

    #
    fig4 = plt.figure()
    DF = train.groupby([i,"Target"])[i].count().unstack("Target").fillna(0)
    DF[[0,1]].plot(kind="bar",stacked=True)
    plt.show()

    # 小提琴图
    fig5 = plt.figure()
    sns.violinplot(x="Target", y=i, data=train, hue="Target")
    plt.xlabel("diabetes")
    plt.ylabel(i)
    plt.show()

# 3.4 特征之间的相关性
# 计算相关性
feat_corr = train.corr().abs()
# 画出热力图
plt.subplots(figsize=(13,9))
sns.heatmap(feat_corr,annot=True)
plt.show()
# 结果显示：最大相关系数为0.54（Age和pregnants）